package dao;

import abstratos.DAO;
import abstratos.Modelo;
import abstratos.Observador;
import abstratos.Observavel;
import db.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

public class Venda implements DAO, Observavel {

    public void inserir(Modelo modelo) {

        mvc.modelos.Venda objVenda = (mvc.modelos.Venda) modelo;

        Conexao conexao = new Conexao();
        conexao.conectar();

        Connection con = conexao.getConnection();

        PreparedStatement inserirVenda = null;
        String strInserirVenda = "INSERT INTO venda VALUES (?, ?, ?)";
        try {
            con.setAutoCommit(false);

            inserirVenda = con.prepareStatement(strInserirVenda);

            inserirVenda.setInt(1, objVenda.getVda_seq());
            inserirVenda.setInt(2, objVenda.getVda_vdr_cod());
            inserirVenda.setString(3, objVenda.getVda_data());

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            if (con != null) {
                try {
                    System.out.println("Iniciando roolback da operação.");
                    con.rollback();
                } catch (SQLException e) {
                    System.out.println(e.getMessage());
                }
            }
        } finally {
            try {
                if (inserirVenda != null) {
                    inserirVenda.close();
                    con.setAutoCommit(true);
                }
                if (!con.isClosed()) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
        }
    }

    public ArrayList<Modelo> consultar() {

        ArrayList<Modelo> listaVenda = new ArrayList<Modelo>();

        ResultSet rs = null;

        Conexao conexao = new Conexao();
        conexao.conectar();

        Connection con = conexao.getConnection();

        PreparedStatement consultarVenda = null;
        String strConsultarVenda = "SELECT * FROM venda";
        try {
            consultarVenda = con.prepareStatement(strConsultarVenda);
            rs = consultarVenda.executeQuery();

            mvc.modelos.Venda oVenda;

            while(rs.next()){
                oVenda = new mvc.modelos.Venda();

                oVenda.setVda_seq(rs.getInt(1));
                oVenda.setVda_vdr_cod(rs.getInt(2));
                oVenda.setVda_data(rs.getString(3));

                listaVenda.add(oVenda);
            }
            return listaVenda;
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
            return null;
        } finally {
            try {
                if (consultarVenda != null) {
                    consultarVenda.close();
                    con.setAutoCommit(true);
                }
                if (!con.isClosed()) {
                    con.close();
                }
            } catch (SQLException ex) {
                System.out.println(ex.getMessage());
            }
        }        
    }

    public void adicionarObservador(Observador obs) {
    }

    public void notificarObservadores() {
    }
}
